const express = require('express');
const fs = require('fs');
const path = require('path');
const app = express();
const PORT = 2343;

// 检查IP是否在局域网范围内
function isLocalNetwork(ip) {
    const ipParts = ip.split('.').map(part => parseInt(part));
    
    // 局域网IP范围:
    // 10.0.0.0 - 10.255.255.255
    // 172.16.0.0 - 172.31.255.255
    // 192.168.0.0 - 192.168.255.255
    return (
        ipParts[0] === 10 ||
        (ipParts[0] === 172 && ipParts[1] >= 16 && ipParts[1] <= 31) ||
        (ipParts[0] === 192 && ipParts[1] === 168)
    );
}

// 中间件：检查请求是否来自局域网
function checkLocalNetwork(req, res, next) {
    const clientIP = req.ip.replace('::ffff:', ''); // 获取客户端IP
    
    if (isLocalNetwork(clientIP)) {
        next(); // 允许访问
    } else {
        res.status(403).send('拒绝访问：仅限局域网内操作');
    }
}

// 数据文件路径
const DATA_FILE = path.join(__dirname, 'data.json');

// 确保数据文件存在
if (!fs.existsSync(DATA_FILE)) {
    fs.writeFileSync(DATA_FILE, JSON.stringify([], null, 2));
}

// 读取版本数据
function readVersions() {
    try {
        const data = fs.readFileSync(DATA_FILE, 'utf8');
        return JSON.parse(data);
    } catch (error) {
        console.error('读取数据失败:', error);
        return [];
    }
}

// 保存版本数据
function saveVersions(versions) {
    try {
        fs.writeFileSync(DATA_FILE, JSON.stringify(versions, null, 2));
        return true;
    } catch (error) {
        console.error('保存数据失败:', error);
        return false;
    }
}

// 配置中间件
app.use(express.json());
app.use(express.static('public')); // 静态文件目录

// 获取版本列表 (公开)
app.get('/api/versions', (req, res) => {
    const versions = readVersions();
    res.json(versions);
});

// 添加新版本 (仅限局域网)
app.post('/api/versions', checkLocalNetwork, (req, res) => {
    const newVersion = req.body;
    const versions = readVersions();
    
    // 验证数据
    if (!newVersion.id || !newVersion.name || !newVersion.date) {
        return res.status(400).json({ error: '缺少必要字段' });
    }
    
    // 添加新版本
    versions.push(newVersion);
    
    if (saveVersions(versions)) {
        res.status(201).json(newVersion);
    } else {
        res.status(500).json({ error: '保存失败' });
    }
});

// 更新版本 (仅限局域网)
app.put('/api/versions/:id', checkLocalNetwork, (req, res) => {
    const versionId = req.params.id;
    const updatedData = req.body;
    const versions = readVersions();
    
    const index = versions.findIndex(v => v.id === versionId);
    if (index === -1) {
        return res.status(404).json({ error: '版本未找到' });
    }
    
    // 更新数据
    versions[index] = { ...versions[index], ...updatedData };
    
    if (saveVersions(versions)) {
        res.json(versions[index]);
    } else {
        res.status(500).json({ error: '保存失败' });
    }
});

// 删除版本 (仅限局域网)
app.delete('/api/versions/:id', checkLocalNetwork, (req, res) => {
    const versionId = req.params.id;
    let versions = readVersions();
    
    const initialLength = versions.length;
    versions = versions.filter(v => v.id !== versionId);
    
    if (versions.length === initialLength) {
        return res.status(404).json({ error: '版本未找到' });
    }
    
    if (saveVersions(versions)) {
        res.status(204).send();
    } else {
        res.status(500).json({ error: '保存失败' });
    }
});

// 启动服务器
app.listen(PORT, () => {
    console.log(`服务器运行在 http://localhost:${PORT}`);
    console.log('管理界面: http://localhost:2343/admin.html');
});
